package com.sharekitchen.service.impl;


import com.sharekitchen.entity.LineData;
import com.sharekitchen.entity.SingleData;
import com.sharekitchen.mapper.LineDataMapper;
import com.sharekitchen.service.LineDataService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;

@Service
public class LineDataServiceImpl implements LineDataService {

    @Autowired
    LineDataMapper lineDataMapper;
    @Override
    public LineData getLineData() {

        LineData lineData = new LineData();

//        设置组数据
        ArrayList<String> legendData = new ArrayList<>();
        legendData.add("订单数量");
        legendData.add("活跃用户数量");
        legendData.add("店铺数量");

        //        设置组数据目前定死
        String stack = "总量";
        String type = "line";


        // 设置折线图的数据
        // 获取当前日期以及其七天前的日期（包括当天）
        LocalDate currentDate = LocalDate.now();
        // 将日期格式化为指定格式的字符串
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
//        建立一个日期列表用于设置X轴
        ArrayList<String> dateList = new ArrayList<>();
//        七天相对应的数值
        ArrayList<Integer> dateCountList = new ArrayList<>();
        //        七天相对应的数值
        ArrayList<Integer> userCountList = new ArrayList<>();
        for (int i = 7; i >= 0; i--) {
            // 获取过去七天的日期（包括当前日期）
            LocalDate sevenDaysAgo = currentDate.minusDays(i);  // 减去6天，包括当天
            String formattedSevenDaysAgo = sevenDaysAgo.format(formatter);
//            把日期添加到日期列表中用于设置X轴
//            这样会导致第一位放入其实在最后一位
            dateList.add(formattedSevenDaysAgo);
        }

        //        设置X轴
        lineData.setxAxisData(dateList);

        for (String nowDate : dateList) {
            //         获取订单数量数据
            dateCountList.add(lineDataMapper.getDateCount(nowDate));
            //        获取活跃用户数量
            userCountList.add(lineDataMapper.getUserCount(nowDate));
        }

//        设置组
        lineData.setLegendData(legendData);
        ArrayList<SingleData> seriesData = new ArrayList<>();
//        设置订单数量数据
        seriesData.add(new SingleData(legendData.get(0), type, stack, dateCountList));
//        设置活跃人数数据
        seriesData.add(new SingleData(legendData.get(1), type, stack, userCountList));


        lineData.setSeries(seriesData);
        return lineData;
    }
}
